package com.robertux.leaderboard.process;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Properties;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;

import org.apache.log4j.Logger;

import com.robertux.leaderboard.beans.entities.GrupoProducto;
import com.robertux.leaderboard.beans.entities.ProgresoMeta;
import com.robertux.leaderboard.beans.entities.PuntosAcumulado;
import com.robertux.leaderboard.beans.entities.PuntosVenta;
import com.robertux.leaderboard.beans.entities.Usuario;
import com.robertux.leaderboard.util.gestoresModelos.GestorEntidades;
import com.robertux.leaderboard.util.gestoresModelos.GestorProgresos;
import com.robertux.leaderboard.util.gestoresModelos.GestorPuntosAcumulados;
import com.robertux.leaderboard.util.gestoresModelos.GestorPuntosVentas;

public class PointsUpdater implements Runnable {
public static final String LEADERBOARDPUPD_PU = "LeaderboardUpdPU";
	
	private Logger logger;
	private EntityManager eMgr;
	private GestorProgresos gProgresos;
	private GestorPuntosVentas gPuntosVentas;
	private GestorPuntosAcumulados gPuntos;
	private Properties mysqlConnProps;
	private Usuario usr;
	int index, total;
	private List<GrupoProducto> productosPuntos;
	
	public PointsUpdater(Properties mysqlConnProps, Usuario usr, int index, int total) {
		this.logger = Logger.getLogger(this.getClass());
		this.mysqlConnProps = mysqlConnProps;
		this.usr = usr;
		this.index = index;
		this.total = total;
		
		
	}

	@Override
	public void run() {
		try {
			this.eMgr = Persistence.createEntityManagerFactory(LEADERBOARDPUPD_PU).createEntityManager();
			this.gProgresos = new GestorProgresos(this.eMgr, this.mysqlConnProps);
			this.gPuntos = new GestorPuntosAcumulados(new GestorEntidades<PuntosAcumulado>(this.eMgr));
			this.gPuntosVentas = new GestorPuntosVentas(new GestorEntidades<PuntosVenta>(this.eMgr));
			
			this.updatePuntosUsuario();
		} catch (Exception e) {
			this.logger.error("Error tratando de configurar las conexiones a las bases de datos: " + e.getMessage(), e);
		} finally {
			if(this.eMgr != null) {
				try { this.eMgr.close(); this.eMgr = null; } catch(Exception ex) { this.logger.warn("Error tratando de cerrar el EntityManager: " + ex.getMessage()); }
			}
		}
	}
	
	public void updatePuntosUsuario() {
		this.logger.info("\n\n\n==== Actualizando puntos del usuario " + (this.index+1) + " de " + this.total + " con ID " + this.usr.getId() + " y nombre " + this.usr.getNombre());
		Calendar calHoy = new GregorianCalendar();
		
		List<ProgresoMeta> progresos = this.gProgresos.getProgresos(usr, calHoy.get(Calendar.YEAR), calHoy.get(Calendar.MONTH)+1);
		
	}

}
